package com.trinity.campus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.trinity.campus.domain.BindBody;
import com.trinity.campus.domain.CampusStudents;
import com.trinity.campus.domain.CampusUserStudent;
import com.trinity.common.core.domain.AjaxResult;
import com.trinity.common.core.domain.entity.SysUser;

import java.util.List;

/**
 * 学生Service接口
 *
 * @author trinity
 * @date 2023-11-18
 */
public interface ICampusStudentsService extends IService<CampusStudents> {
    /**
     * 查询学生
     *
     * @param studentId 学生主键
     * @return 学生
     */
    public CampusStudents selectCampusStudentsByStudentId(Long studentId);

    /**
     * 查询学生列表
     *
     * @param campusStudents 学生
     * @return 学生集合
     */
    public List<CampusStudents> selectCampusStudentsList(CampusStudents campusStudents);

    public List<CampusStudents> selectCampusStudentsListByDeptId(Long deptId);

    /**
     * 新增学生
     *
     * @param campusStudents 学生
     * @return 结果
     */
    public int insertCampusStudents(CampusStudents campusStudents);

    /**
     * 修改学生
     *
     * @param campusStudents 学生
     * @return 结果
     */
    public int updateCampusStudents(CampusStudents campusStudents);

    /**
     * 批量删除学生
     *
     * @param studentIds 需要删除的学生主键集合
     * @return 结果
     */
    public int deleteCampusStudentsByStudentIds(Long[] studentIds);

    /**
     * 逻辑删除
     * @param studentIds 需要逻辑删除的学生
     * @return 结果
     */
    public int setStudentTombstoneByStudentIds(Long[] studentIds);

    /**
     * 删除学生信息
     *
     * @param studentId 学生主键
     * @return 结果
     */
    public int deleteCampusStudentsByStudentId(Long studentId);

    /**
     * 统计数量
     *
     * @param campusStudents 学生
     * @return 结果
     */
    public Long countStudents(CampusStudents campusStudents);

    /**
     * 导入用户数据
     *
     * @param userList        用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    public String importUser(List<CampusStudents> userList, Boolean isUpdateSupport, String operName);

    public AjaxResult bindStudent(BindBody bindBody);

    public CampusUserStudent getBindStudent(Long userId);

    boolean checkStudentNoUnique(CampusStudents student);

    /**
     * 学生查询自己的学号信息
     * @param queryStudent  姓名 + 班级
     * @return 学生
     */
    List<CampusStudents> selectStudentListByNameAndDept(CampusStudents queryStudent);
}
